#ifndef SCREENSHOTSERVICE_H
#define SCREENSHOTSERVICE_H

#include <QObject>
#include <QPixmap>
#include <QImage>
#include <QScreen>
#include <QApplication>
#include "service_global.h"
#include "screenshot/ScreenshotConfig.h"

/**
 * @brief 截图服务类 - 管理截图业务逻辑
 * 
 * 职责：
 * - 全屏截图
 * - 区域截图
 * - 保存截图
 * - 复制到剪贴板
 * - 截图配置管理
 */
class SERVICE_EXPORT ScreenshotService : public QObject
{
    Q_OBJECT

public:
    /**
     * @brief 获取单例实例
     */
    static ScreenshotService& instance();

    /**
     * @brief 获取所有屏幕的截图
     * @return 全屏截图
     */
    QPixmap captureAllScreens();

    /**
     * @brief 获取指定屏幕的截图
     * @param screen 屏幕对象
     * @return 屏幕截图
     */
    QPixmap captureScreen(QScreen* screen);

    /**
     * @brief 获取指定区域的截图
     * @param rect 区域矩形
     * @return 区域截图
     */
    QPixmap captureRegion(const QRect& rect);

    /**
     * @brief [FDD-2025-03-021][API-004] 优化的区域截图，只抓取相交的屏幕
     * @param rect 全局坐标区域
     * @return 区域截图
     */
    QImage captureRegionOptimized(const QRect& rect);

    /**
     * @brief 保存截图到文件
     * @param pixmap 截图
     * @param filePath 文件路径（如果为空，使用默认路径和文件名）
     * @return 是否成功
     */
    bool saveScreenshot(const QPixmap& pixmap, const QString& filePath = QString());

    /**
     * @brief 复制截图到剪贴板
     * @param pixmap 截图
     */
    void copyToClipboard(const QPixmap& pixmap);

    /**
     * @brief 获取默认保存路径
     * @return 保存路径
     */
    QString getDefaultSavePath() const;

    /**
     * @brief 生成默认文件名
     * @return 文件名
     */
    QString generateDefaultFileName() const;

    /**
     * @brief 获取截图配置
     */
    ScreenshotConfig getConfig() const { return m_config; }

    /**
     * @brief 设置截图配置
     */
    void setConfig(const ScreenshotConfig& config) { m_config = config; }

signals:
    /**
     * @brief 截图保存成功信号
     * @param filePath 保存的文件路径
     */
    void screenshotSaved(const QString& filePath);

    /**
     * @brief 截图保存失败信号
     * @param error 错误信息
     */
    void screenshotSaveFailed(const QString& error);

private:
    explicit ScreenshotService(QObject *parent = nullptr);
    ~ScreenshotService();

    // 禁用拷贝
    ScreenshotService(const ScreenshotService&) = delete;
    ScreenshotService& operator=(const ScreenshotService&) = delete;

    ScreenshotConfig m_config;  // 截图配置
};

#endif // SCREENSHOTSERVICE_H

